package org.robotfish.learn;

import org.ejml.simple.SimpleMatrix;

public interface MechanicalModel {
	
	/**
	 * 
	 * @param current kala seisund (mõjuvad jõud samuti kuigi neid ei kasutata)
	 * @param velocityCOG velocity of Center Of Gravity - velocity is 3-vector of (vx, vy, w)
	 * @param fishMotion
	 * @return kala seisund järgmisel ajahetkel ja kalale mõjuvad jõud
	 */
	public RigidLinkFishState getNextState(RigidLinkFishState currentState, SimpleMatrix velocityCOG, FishMotion fishMotion);

	/**
	 * force affecting the Center Of Gravity - force is 3-vector of (Fx,Fy,T)
	 */
	public SimpleMatrix getForceCOG(RigidLinkFishState state);
	
	/**
	 * position of Center Of Gravity - 3-vector of (x, y, angle) 
	 * @param state field linkPositionCOG0 contains positions of centers of links
	 * @return
	 */
	public SimpleMatrix getPositionCOG(RigidLinkFishState state);
	
	public double getCurvature(RigidLinkFishState state);
	
	public int getTimeStep(RigidLinkFishState state);
	
}
